home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Resources / Developers / XAMPP 1.5.4 / Windows installer / xampp-win32-1.5.4-installer.exe / xampp / php / pear / PHPUnit / TestResult.php < prev    next >
Encoding:
PHP Script  |  2005-12-02  |  8.3 KB  |  348 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
  3.  
  4. /**
  5.  * PHP Version 4
  6.  *
  7.  * Copyright (c) 2002-2005, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  8.  * All rights reserved.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  *
  14.  *   * Redistributions of source code must retain the above copyright
  15.  *     notice, this list of conditions and the following disclaimer.
  16.  * 
  17.  *   * Redistributions in binary form must reproduce the above copyright
  18.  *     notice, this list of conditions and the following disclaimer in
  19.  *     the documentation and/or other materials provided with the
  20.  *     distribution.
  21.  *
  22.  *   * Neither the name of Sebastian Bergmann nor the names of his
  23.  *     contributors may be used to endorse or promote products derived
  24.  *     from this software without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  27.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  28.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  29.  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  30.  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  31.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  32.  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  33.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  34.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRIC
  35.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  36.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37.  * POSSIBILITY OF SUCH DAMAGE.
  38.  *
  39.  * @category   Testing
  40.  * @package    PHPUnit
  41.  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
  42.  * @copyright  2002-2005 Sebastian Bergmann <sb@sebastian-bergmann.de>
  43.  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
  44.  * @version    CVS: $Id: TestResult.php,v 1.18 2005/11/10 09:47:15 sebastian Exp $
  45.  * @link       http://pear.php.net/package/PHPUnit
  46.  * @since      File available since Release 1.0.0
  47.  */
  48.  
  49. require_once 'PHPUnit/TestFailure.php';
  50. require_once 'PHPUnit/TestListener.php';
  51.  
  52. if (!function_exists('is_a')) {
  53.     require_once 'PHP/Compat/Function/is_a.php';
  54. }
  55.  
  56. /**
  57.  * A TestResult collects the results of executing a test case.
  58.  *
  59.  * @category   Testing
  60.  * @package    PHPUnit
  61.  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
  62.  * @copyright  2002-2005 Sebastian Bergmann <sb@sebastian-bergmann.de>
  63.  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
  64.  * @version    Release: 1.3.2
  65.  * @link       http://pear.php.net/package/PHPUnit
  66.  * @since      Class available since Release 1.0.0
  67.  */
  68. class PHPUnit_TestResult {
  69.     /**
  70.      * @var    array
  71.      * @access protected
  72.      */
  73.     var $_errors = array();
  74.  
  75.     /**
  76.      * @var    array
  77.      * @access protected
  78.      */
  79.     var $_failures = array();
  80.  
  81.      /**
  82.      * @var    array
  83.      * @access protected
  84.      */
  85.     var $_listeners = array();
  86.  
  87.     /**
  88.      * @var    array
  89.      * @access protected
  90.      */
  91.     var $_passedTests = array();
  92.  
  93.     /**
  94.      * @var    integer
  95.      * @access protected
  96.      */
  97.     var $_runTests = 0;
  98.  
  99.     /**
  100.      * @var    boolean
  101.      * @access private
  102.      */
  103.     var $_stop = FALSE;
  104.  
  105.     /**
  106.      * Adds an error to the list of errors.
  107.      * The passed in exception caused the error.
  108.      *
  109.      * @param  object
  110.      * @param  object
  111.      * @access public
  112.      */
  113.     function addError(&$test, &$t) {
  114.         $this->_errors[] = new PHPUnit_TestFailure($test, $t);
  115.  
  116.         for ($i = 0; $i < sizeof($this->_listeners); $i++) {
  117.             $this->_listeners[$i]->addError($test, $t);
  118.         }
  119.     }
  120.  
  121.     /**
  122.      * Adds a failure to the list of failures.
  123.      * The passed in exception caused the failure.
  124.      *
  125.      * @param  object
  126.      * @param  object
  127.      * @access public
  128.      */
  129.     function addFailure(&$test, &$t) {
  130.         $this->_failures[] = new PHPUnit_TestFailure($test, $t);
  131.  
  132.         for ($i = 0; $i < sizeof($this->_listeners); $i++) {
  133.             $this->_listeners[$i]->addFailure($test, $t);
  134.         }
  135.     }
  136.  
  137.     /**
  138.      * Registers a TestListener.
  139.      *
  140.      * @param  object
  141.      * @access public
  142.      */
  143.     function addListener(&$listener) {
  144.         if (is_object($listener) &&
  145.             is_a($listener, 'PHPUnit_TestListener')) {
  146.             $this->_listeners[] = &$listener;
  147.         }
  148.     }
  149.  
  150.     /**
  151.      * Adds a passed test to the list of passed tests.
  152.      *
  153.      * @param  object
  154.      * @access public
  155.      */
  156.     function addPassedTest(&$test) {
  157.         $this->_passedTests[] = &$test;
  158.     }
  159.  
  160.     /**
  161.      * Informs the result that a test was completed.
  162.      *
  163.      * @param  object
  164.      * @access public
  165.      */
  166.     function endTest(&$test) {
  167.         for ($i = 0; $i < sizeof($this->_listeners); $i++) {
  168.             $this->_listeners[$i]->endTest($test);
  169.         }
  170.     }
  171.  
  172.     /**
  173.      * Gets the number of detected errors.
  174.      *
  175.      * @return integer
  176.      * @access public
  177.      */
  178.     function errorCount() {
  179.         return sizeof($this->_errors);
  180.     }
  181.  
  182.     /**
  183.      * Returns an Enumeration for the errors.
  184.      *
  185.      * @return array
  186.      * @access public
  187.      */
  188.     function &errors() {
  189.         return $this->_errors;
  190.     }
  191.  
  192.     /**
  193.      * Gets the number of detected failures.
  194.      *
  195.      * @return integer
  196.      * @access public
  197.      */
  198.     function failureCount() {
  199.         return sizeof($this->_failures);
  200.     }
  201.  
  202.     /**
  203.      * Returns an Enumeration for the failures.
  204.      *
  205.      * @return array
  206.      * @access public
  207.      */
  208.     function &failures() {
  209.         return $this->_failures;
  210.     }
  211.  
  212.     /**
  213.      * Returns an Enumeration for the passed tests.
  214.      *
  215.      * @return array
  216.      * @access public
  217.      */
  218.     function &passedTests() {
  219.         return $this->_passedTests;
  220.     }
  221.  
  222.     /**
  223.      * Unregisters a TestListener.
  224.      * This requires the Zend Engine 2 (to work properly).
  225.      *
  226.      * @param  object
  227.      * @access public
  228.      */
  229.     function removeListener(&$listener) {
  230.         for ($i = 0; $i < sizeof($this->_listeners); $i++) {
  231.             if ($this->_listeners[$i] === $listener) {
  232.                 unset($this->_listeners[$i]);
  233.             }
  234.         }
  235.     }
  236.  
  237.     /**
  238.      * Runs a TestCase.
  239.      *
  240.      * @param  object
  241.      * @access public
  242.      */
  243.     function run(&$test) {
  244.         $this->startTest($test);
  245.         $this->_runTests++;
  246.         $test->runBare();
  247.         $this->endTest($test);
  248.     }
  249.  
  250.     /**
  251.      * Gets the number of run tests.
  252.      *
  253.      * @return integer
  254.      * @access public
  255.      */
  256.     function runCount() {
  257.         return $this->_runTests;
  258.     }
  259.  
  260.     /**
  261.      * Checks whether the test run should stop.
  262.      *
  263.      * @access public
  264.      */
  265.     function shouldStop() {
  266.         return $this->_stop;
  267.     }
  268.  
  269.     /**
  270.      * Informs the result that a test will be started.
  271.      *
  272.      * @param  object
  273.      * @access public
  274.      */
  275.     function startTest(&$test) {
  276.         for ($i = 0; $i < sizeof($this->_listeners); $i++) {
  277.             $this->_listeners[$i]->startTest($test);
  278.         }
  279.     }
  280.  
  281.     /**
  282.      * Marks that the test run should stop.
  283.      *
  284.      * @access public
  285.      */
  286.     function stop() {
  287.         $this->_stop = TRUE;
  288.     }
  289.  
  290.     /**
  291.      * Returns a HTML representation of the test result.
  292.      *
  293.      * @return string
  294.      * @access public
  295.      */
  296.     function toHTML() {
  297.         return '<pre>' . htmlspecialchars($this->toString()) . '</pre>';
  298.     }
  299.  
  300.     /**
  301.      * Returns a text representation of the test result.
  302.      *
  303.      * @return string
  304.      * @access public
  305.      */
  306.     function toString() {
  307.         $result = '';
  308.  
  309.         foreach ($this->_passedTests as $passedTest) {
  310.             $result .= sprintf(
  311.               "TestCase %s->%s() passed\n",
  312.  
  313.               get_class($passedTest),
  314.               $passedTest->getName()
  315.             );
  316.         }
  317.  
  318.         foreach ($this->_failures as $failedTest) {
  319.             $result .= $failedTest->toString();
  320.         }
  321.  
  322.         return $result;
  323.     }
  324.  
  325.     /**
  326.      * Returns whether the entire test was successful or not.
  327.      *
  328.      * @return boolean
  329.      * @access public
  330.      */
  331.     function wasSuccessful() {
  332.         if (empty($this->_errors) && empty($this->_failures)) {
  333.             return TRUE;
  334.         } else {
  335.             return FALSE;
  336.         }
  337.     }
  338. }
  339.  
  340. /*
  341.  * Local variables:
  342.  * tab-width: 4
  343.  * c-basic-offset: 4
  344.  * c-hanging-comment-ender-p: nil
  345.  * End:
  346.  */
  347. ?>
  348.